/*
 * binary_tree.h
 *
 *  Created on: 2020��1��1��
 *      Author: Administrator
 */

#include <stdbool.h>
#include "../common.h"
#ifndef BINARY_TREE_H_
#define BINARY_TREE_H_

typedef struct BTNode {
	char data;
	struct BTNode* left;
	struct BTNode* right;
} BTNode, *BinTree;

/**
 * 利用二叉树先序扩展序列创建二叉树
 * 例如：AB..CD...
 */
void create_tree(BinTree* root);

bool is_tree_empty(BinTree root);

int count_nodes(BinTree root);

int height(BinTree root);

void preorder(BinTree root);

/**
 * 非递归先序遍历
 */
void unr_preorder(BinTree root);

void inorder(BinTree root);

/**
 * 非递归中序遍历
 */
void unr_inorder(BinTree root);

void postorder(BinTree root);

/**
 * 非递归后序遍历
 */
void unr_postorder(BinTree root);
/**
 * 层次遍历
 * 利用辅助队列存储孩子节点
 */
void levelorder(BinTree root);

#endif /* BINARY_TREE_H_ */
